今天我們來用「HTTP 請求」節點,來做一個可以給我們狗狗 or 貓貓的機器人,由於這兩種問題 (dog or cat) 很類似,可以用「聚合器」來簡化流程,並且用變數分配器來記錄目前使用者得到的動物數量
在開始之前,先來介紹 http 請求是什麼吧!
當你在使用網路時,你的瀏覽器或應用程式會發送 HTTP 請求 (HTTP Request) 來得到網頁或其他資源。HTTP(超文本傳輸協定)是一種用於在客戶端和伺服器之間進行通信的協議
HTTP 定義了一些不同的請求方法,常用的方法包括:
以 Cat as a service 為例,觀察他的文件
點擊 Random cat 按鈕,瀏覽器會帶你到 https://cataas.com/cat
這個網站,正確來說應該是「向 https://cataas.com
這個 url 的 /cat
位置使用 GET 方法發出請求 (request)」
GET 的參數會顯示在 URL 上 (param);而 POST 的參數會放在 request body 中
開發一個 API 之後,如果你用的不是 FastAPI 或者沒有用 swagger UI,可能會需要用 curl 來測試 API。但是有 GUI 誰不用呢?Postman 可以讓你很方便快速的測試寫好的 API,或是其他人寫好的 API
到 https://www.postman.com/ 上註冊一個帳號,然後用剛剛貓咪的例子來測試。你也可以在 vscode 的擴充套件安裝使用,以下會使用 vscode 的 postman 來測試,但操作起來是差不多的。
新增一個 HTTP Request
填入剛剛的貓咪 url
按下送出,就可以得到一隻貓貓了喔
建立一個空白的工作流,新增一個 HTTP 請求節點
這邊填入狗勾 API Dog CEO 的隨機狗勾 URL https://dog.ceo/api/breeds/image/random
記得要把直接回覆的內容改成 HTTP 請求的 "file"
測試一下會發現沒有東西ㄚ??
這時候,就可以用 Postman 來測試了,測試後發現原來他的 random 不是直接給一張圖,而是給你一張圖的 URL,我們要再去對這張圖請求一次
所以正確的流程應該會像這樣,先取的隨機的圖片 url -> 透過 python 程式碼取得 url -> 再透過這個取得的圖片 url 取得狗勾圖片
這是程式碼的內容,其實就是根據 postman 測試出來的結果,去取得 "messge" 這個 value
import json
def main(response: str) -> dict:
obj = json.loads(response)
url = obj['message']
return {
"url": url
}
然後在第二個 HTTP request 這邊,填入上一個節點取出來的 url
測試一下,成功了!
接下來,我們把這個狗勾請求的流程變成一個工作流 (workflow),方便之後使用。工作流 (Workflow) 和對話流 (Chatflow) 最大的差別就是工作流不是為了聊天所設計的,也就是說,一個工作流就像是一個 API 一樣,給定指定的參數,你就會拿指定的回覆。更重要的是,工作流可以獨立變成一個節點給其他 Chatflow 使用
新增一個工作流
進到工作流之後,會發現空空如也,也沒有「直接回覆」了
取而代之的是一個「結束」節點,這個節點必須設定最後結束要輸出的東東
我們就把剛剛做好的 Dog CEO API 串進來吧,目前結束節點不知道為何無法直接輸出圖片,但也沒關係,只要可以把複雜的節點變少,那就是值得的!
然後在右上角點選「發佈為工具」
設定的部分,因為我們目前沒有任何指定的輸入 (明天才會用到),所以這邊只要取好名字即可
修改原本的 Chatflow,注意這邊我們意處理回傳回來的 JSON 格式
模板轉換程式碼 (取得 url)
測試結果
你可能會想說,原本就是五個節點現在也是五個節點,幹嘛額外弄一個工作流出來?答案是:因為我希望做的是描述狗勾的外型就可以拿到狗勾的圖片,那現在這樣隨機拿狗勾照片的方法肯定行不通,這個工作流會比想像中更加複雜,為了降低 Chatflow 的複雜度,我們不得不將不同功能區塊模組化...blablabla,明天就知道了啦XD
今天沒有太多生成式 AI 的內容,主要是讓大家認識一下 HTTP 請求,串接除了 OpenAI 以外的 API。明天我會延續今天的主題做一個「狗狗貓貓猜測的機器人」,先判斷使用者問的是狗還是貓進行問題分類,再根據品種去找出可能的狗勾們,並且使用「聚合器」來簡化流程,期待一下吧~